﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static MovimentoVO getMovimento(int idMovimento)
        {
            List<MovimentoVO> listaMovimentoVo = getMovimentos(idMovimento, null);
            if (listaMovimentoVo != null && listaMovimentoVo.Count > 0)
                return listaMovimentoVo[0];
            else
                return null;
        }

        public static List<MovimentoVO> getMovimentos()
        {
            return getMovimentos(null, null);
        }

        public static List<MovimentoVO> getMovimentos(int? idMovimento, int? idMovimentacao)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdMovimento, IdMovimentacao, IdTabelaAvulso, IdTabelaConvenio, IdTabelaConvenioP, IdTabelaMensal, Especie, Periodo, Valor, ValorConvenio, ValorConvenioExtra ");
            query.AppendLine("FROM movimento ");

            if (idMovimento != null)
            {
                query.AppendLine(where + "IdMovimento=?IdMovimento ");
                where = "AND ";
            }
            if (idMovimentacao != null)
            {
                query.AppendLine(where + "IdMovimentacao=?IdMovimentacao ");
                where = "AND ";
            }
            query.AppendLine("ORDER BY IdMovimentacao, IdMovimento");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idMovimento != null) cmd.Parameters.AddWithValue("?IdMovimento", idMovimento);
            if (idMovimentacao != null) cmd.Parameters.AddWithValue("?IdMovimentacao", idMovimentacao);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<MovimentoVO> listMovimentoVOs = new List<MovimentoVO>();

                while (reader.Read())
                {
                    MovimentoVO movimentoVO = MovimentoVO.CreateMovimentoVO();
                    movimentoVO.idMovimento = reader.GetInt32("IdMovimento");
                    movimentoVO.idMovimentacao = reader.GetInt32("IdMovimentacao");
                    movimentoVO.idTabelaAvulso = reader.GetInt32("IdTabelaAvulso");
                    movimentoVO.idTabelaConvenio = reader.GetInt32("IdTabelaConvenio");
                    movimentoVO.idTabelaConvenioP = reader.GetInt32("IdTabelaConvenioP");
                    movimentoVO.idTabelaMensal = reader.GetInt32("IdTabelaMensal");
                    movimentoVO.especie = reader.GetString("Especie");
                    movimentoVO.periodo = reader.GetString("Periodo");
                    movimentoVO.valor = reader.GetDecimal("Valor");
                    movimentoVO.valorConvenio = reader.GetDecimal("ValorConvenio");
                    movimentoVO.valorConvenioExtra = reader.GetDecimal("ValorConvenioExtra");

                    listMovimentoVOs.Add(movimentoVO);
                }
                reader.Close();
                return listMovimentoVOs;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }
 
        }

        public static void setMovimento(MovimentoVO movimentoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE movimento ");
            query.AppendLine("SET IdTabelaAvulso=?IdTabelaAvulso, IdTabelaConvenio=?IdTabelaConvenio, IdTabelaConvenioP=?IdTabelaConvenioP, IdTabelaMensal=?IdTabelaMensal, Especie=?Especie, Periodo=?Periodo, Valor=?Valor, ValorConvenio=?ValorConvenio, ValorConvenioExtra=?ValorConvenioExtra ");
            query.AppendLine("WHERE IdMovimento=?IdMovimento AND IdMovimentacao=?IdMovimentacao ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdMovimento", movimentoVO.idMovimento);
            cmd.Parameters.AddWithValue("?IdMovimentacao", movimentoVO.idMovimentacao);
            cmd.Parameters.AddWithValue("?IdTabelaAvulso", movimentoVO.idTabelaAvulso);
            cmd.Parameters.AddWithValue("?IdTabelaConvenio", movimentoVO.idTabelaConvenio);
            cmd.Parameters.AddWithValue("?IdTabelaConvenioP", movimentoVO.idTabelaConvenioP);
            cmd.Parameters.AddWithValue("?IdTabelaMensal", movimentoVO.idTabelaMensal);
            cmd.Parameters.AddWithValue("?Especie", movimentoVO.especie);
            cmd.Parameters.AddWithValue("?Periodo", movimentoVO.periodo);
            cmd.Parameters.AddWithValue("?Valor", movimentoVO.valor);
            cmd.Parameters.AddWithValue("?ValorConvenio", movimentoVO.valorConvenio);
            cmd.Parameters.AddWithValue("?ValorConvenioExtra", movimentoVO.valorConvenioExtra);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
        public static void setMovimentos(List<MovimentoVO> listMovimentoVO)
        {
            if (listMovimentoVO != null)
                foreach (MovimentoVO movimentoVO in listMovimentoVO)
                    setMovimento(movimentoVO);
        }

        public static long newMovimento(MovimentoVO movimentoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO movimento ");
            query.AppendLine("SET IdMovimentacao=?IdMovimentacao, IdTabelaAvulso=?IdTabelaAvulso, IdTabelaConvenio=?IdTabelaConvenio, IdTabelaConvenioP=?IdTabelaConvenioP, IdTabelaMensal=?IdTabelaMensal, Especie=?Especie, Periodo=?Periodo, Valor=?Valor, ValorConvenio=?ValorConvenio, ValorConvenioExtra=?ValorConvenioExtra ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdMovimento", movimentoVO.idMovimento);
            cmd.Parameters.AddWithValue("?IdMovimentacao", movimentoVO.idMovimentacao);
            cmd.Parameters.AddWithValue("?IdTabelaAvulso", movimentoVO.idTabelaAvulso);
            cmd.Parameters.AddWithValue("?IdTabelaConvenio", movimentoVO.idTabelaConvenio);
            cmd.Parameters.AddWithValue("?IdTabelaConvenioP", movimentoVO.idTabelaConvenioP);
            cmd.Parameters.AddWithValue("?IdTabelaMensal", movimentoVO.idTabelaMensal);
            cmd.Parameters.AddWithValue("?Especie", movimentoVO.especie);
            cmd.Parameters.AddWithValue("?Periodo", movimentoVO.periodo);
            cmd.Parameters.AddWithValue("?Valor", movimentoVO.valor);
            cmd.Parameters.AddWithValue("?ValorConvenio", movimentoVO.valorConvenio);
            cmd.Parameters.AddWithValue("?ValorConvenioExtra", movimentoVO.valorConvenioExtra);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
        public static void newMovimentos(List<MovimentoVO> listMovimentoVO)
        {
            if (listMovimentoVO != null)
                foreach (MovimentoVO movimentoVO in listMovimentoVO)
                    newMovimento(movimentoVO);
        }

        public static void delMovimento(MovimentoVO movimentoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM movimento ");
            query.AppendLine("WHERE IdMovimento=?IdMovimento ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdMovimento", movimentoVO.idMovimento);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
        public static void delMovimentos(List<MovimentoVO> listMovimentoVO)
        {
            if (listMovimentoVO != null)
                foreach (MovimentoVO movimentoVO in listMovimentoVO)
                    delMovimento(movimentoVO);
        }
    }
}
